로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
06 배포 장고서버 static 파일 Nginx서버에 실시간 동기화처리방법 | ✅ 편저: 코담 운영자
장고서버 static (정적인) 파일들을 Nginx 서버에 실시간 동기화 처리 방법
🔧 1. Nginx 서버 설정 (192.168.120.130)
sudo mkdir -p /var/www/ai_rest/staticfiles
sudo chown -R nextjs:www-data /var/www/ai_rest/staticfiles
sudo chmod -R 755 /var/www/ai_rest/staticfiles # 필요 시 보안 강화 가능
Nginx 설정 예시:
location /static/ {
alias /var/www/ai_rest/staticfiles/;
}
🔐 2. SSH 무비밀번호 접속 설정 (자동 rsync를 위해 필수)
✅ 1. Django 서버에서 SSH 키 생성 (한 번만 실행)
ssh-keygen -t rsa -b 4096 -C "python@django-server"
- 경로 물어보면 그냥 Enter (기본값:
~/.ssh/id_rsa
) - 비밀번호도 설정하지 말고 그냥 Enter
생성되면 다음 두 개 파일이 생깁니다:
~/.ssh/id_rsa
(개인키)~/.ssh/id_rsa.pub
(공개키)
✅ 2. Nginx 서버에 공개키 등록
Django 서버에서 아래 명령 실행:
ssh-copy-id nextjs@192.168.120.130
이 명령은 Django 서버의 공개키(id_rsa.pub
)를 Nginx 서버의 /home/nextjs/.ssh/authorized_keys
에 추가합니다.
✅ 3. 테스트
Django 서버에서 다음 명령어로 확인:
ssh nextjs@192.168.120.130
➜ 비밀번호 없이 바로 접속되면 성공입니다. 이후
rsync
,scp
명령도 자동 작동됩니다.
✅ 선택 사항: 보안 권장 설정
Nginx 서버 /etc/ssh/sshd_config
파일에서 아래 항목을 확인:
PubkeyAuthentication yes
PasswordAuthentication no # 키 등록 완료 후 적용 권장
sudo systemctl restart ssh
🔄 3. Django 서버에서 초기 정적 파일 복사 (192.168.120.129)
scp -r /home/python/ai_rest/staticfiles/* nextjs@192.168.120.130:/var/www/ai_rest/staticfiles/
✅ 위 명령은 초기 단발성 복사용입니다. 실시간 동기화는 아래 inotify 방식을 사용하세요.
⚙️ 4. inotify로 실시간 감지 및 자동 rsync 실행
inotify-tools 설치
sudo apt install inotify-tools
sync_staticfiles.sh
#!/bin/bash
# 실시간 감시 및 rsync 동기화
inotifywait -m -r -e modify,create,delete /home/python/ai_rest/staticfiles \
| while read path _ file; do
rsync -az --delete /home/python/ai_rest/staticfiles/ nextjs@192.168.120.130:/var/www/ai_rest/staticfiles/
done
실행 권한 부여
chmod +x /home/python/sync_staticfiles.sh
🎛️ 5. 백그라운드 실행 방법
(1) tmux 사용
tmux new -s static_sync
./sync_staticfiles.sh
Detach:
Ctrl + B
후d
(2) screen 사용
screen -S static_sync
./sync_staticfiles.sh
Detach:
Ctrl + A
후d
🛠️ 6. systemd 서비스 등록 (재부팅 자동 실행)
서비스 유닛 생성
sudo vi /etc/systemd/system/static-sync.service
[Unit]
Description=Static files sync with inotify
After=network.target
[Service]
Type=simple
User=python
ExecStart=/home/python/sync_staticfiles.sh
Restart=always
[Install]
WantedBy=multi-user.target
systemd 적용 및 실행
sudo systemctl daemon-reload
sudo systemctl enable static-sync
sudo systemctl start static-sync
상태 확인
sudo systemctl status static-sync
✅ 마무리
- 실시간 동기화를 위한 보안 강화 권장:
- Nginx static 디렉토리 경로의 접근 권한 점검
.php
,.sh
,.cgi
등의 실행 파일 업로드 방지 설정- SSH 키 관리는 root 외 사용자로 제한
- 블로그 게시 시에는 아이콘 대신 텍스트 또는 HTML 태그 사용 권장